var Profesor = function () {

return { 
init: function () {

			var urlThemes = '';
			
			var codigoProfesor;
			
			var gestionGroupProfesor = new Ext.ButtonGroup({
				columns: 3,
				title: 'Gestion de profesores',
				items: [{
					text: '<font face="arial" size=2 color=black>Crear</font>',
					scale: 'large',
					rowspan: 3, 
					iconCls: 'crear',
					handler: function(){
										formularioProfesor.getForm().reset();
										winProfesor.setTitle('Crear profesor');
										Ext.getCmp('BguardarProfesor').setText('Guardar');
										Ext.getCmp('IDCodigoProfesor').enable();
										winProfesor.show(this);
									   }
					},{
						text: '<font face="arial" size=2 color=black>Actualizar</font>',
						scale: 'large',
						rowspan: 3,
						iconCls: 'actualizar',
						handler: function(){
												if(Ext.getCmp('IDIdentificacionProfesor').isValid())
												{
													codigoProfesor = Ext.getCmp('IDCodigoProfesor').getValue();
													winProfesor.setTitle('Actualizar profesor');
													Ext.getCmp('BguardarProfesor').setText('Actualizar');
													Ext.getCmp('IDCodigoProfesor').disable();
													winProfesor.show(this);
												}
												else{Ext.example.msg('Aviso', 'Debe seleccionar un profesor');}
										   }
					},{
						text: '<font face="arial" size=2 color=black>Eliminar</font>',
						scale: 'large',
						rowspan: 3,
						iconCls: 'eliminar',
						handler: function(){
												if(Ext.getCmp('IDIdentificacionProfesor').isValid()){ eliminarProfesor();}
												else{ Ext.example.msg('Aviso', 'Debe seleccionar un profesor');}
										   }
					}
				]
			});
			
			var busquedaGroupProfesor = new Ext.ButtonGroup({
				columns: 3,
				title: 'Opciones de busqueda',
				items: [{
					xtype:'splitbutton',
					text: '<font face="arial" size=2 color=black>Buscar</font>',
					scale: 'large',
					colspan: 1, 
					iconCls: 'buscar',
					menu: [
							{xtype: 'textfield', iconCls: 'buscar', id: 'IDBusquedaProfesor', emptyText: 'buscar'},
							{text: 'Buscar por nombre', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Nombre', start: 0, limit: 20}});}},
							{text: 'Buscar por identificacion', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Identificacion', start: 0, limit: 20}});}},
							{text: 'Buscar por direccion', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Direccion', start: 0, limit: 20}});}},
							{text: 'Buscar por telefono', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Telefono', start: 0, limit: 20}});}},
							{text: 'Buscar por e-mail', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Email', start: 0, limit: 20}});}},
							{text: 'Buscar por dependencia', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Dependencia', start: 0, limit: 20}});}},
							{text: 'Buscar por titulo', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Titulo', start: 0, limit: 20}});}},
							{text: 'Buscar por todos los campos', iconCls: 'item', handler: function(){ ProfesorDataStore.load({params: {Busqueda:Ext.getCmp('IDBusquedaProfesor').getValue(), Campo:'Todos', start: 0, limit: 20}});}}
						  ]
				},{
					xtype:'splitbutton',
					text: '<font face="arial" size=2 color=black>Agrupar</font>',
					scale: 'large',
					iconCls: 'agrupar',
					colspan: 1,
					menu: [
							{text: 'Identificacion', iconCls: 'item', handler: function(){ ProfesorDataStore.groupBy('profesorIdentificacion');}},
							{text: 'Nombre', iconCls: 'item', handler: function(){ ProfesorDataStore.groupBy('profesorNombre');}},
							{text: 'Direccion', iconCls: 'item', handler: function(){ ProfesorDataStore.groupBy('profesorDireccion');}},
							{text: 'Telefono', iconCls: 'item', handler: function(){ ProfesorDataStore.groupBy('profesorTelefono');}},
							{text: 'E-mail', iconCls: 'item', handler: function(){ ProfesorDataStore.groupBy('profesorEmail');}},
							{text: 'Dependencia', iconCls: 'item', handler: function(){ ProfesorDataStore.groupBy('profesorDependencia');}},
							{text: 'Titulo', iconCls: 'item', handler: function(){ ProfesorDataStore.groupBy('profesorTitulo');}},
							{text: 'No agrupar', iconCls: 'item', handler: function(){ ProfesorDataStore.clearGrouping();}}
						  ],
					
				},{
					xtype:'splitbutton',
					text: '<font face="arial" size=2 color=black>Ordenar</font>',
					scale: 'large',
					iconCls: 'ordenar',
					colspan: 1,
					menu: [
							{text: 'Codigo', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorCodigo');}},
							{text: 'Identificacion', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorIdentificacion');}},
							{text: 'Nombre', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorNombre');}},
							{text: 'Direccion', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorDireccion');}},
							{text: 'Telefono', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorTelefono');}},
							{text: 'E-mail', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorEmail');}},
							{text: 'Dependencia', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorDependencia');}},
							{text: 'Titulo', iconCls: 'item', handler: function(){ ProfesorDataStore.sort('profesorDependencia');}}
						  ],
				}]
			});
					
			var accesibilidadGroupProfesor = new Ext.ButtonGroup({
				columns: 1,
				title: 'Accesibilidad',
				items: [{
					text: '<font face="arial" size=2 color=black>Ajustar</font>',
					scale: 'large',
					rowspan: 3, 
					iconCls: 'ajustar',
					handler: function(){
								winAyudaProfesor.show();
							}
				},{
					xtype:'splitbutton',
					text: '<font face="arial" size=2 color=black>Temas</font>',
					scale: 'large',
					//rowspan: 3,
					iconCls: 'temas',
					menu: [
							{text: 'access', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-access.css');}},
							{text: 'black', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-black.css');}},
							{text: 'blue', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-blue.css');}},
							{text: 'chocolate', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-chocolate.css');}},
							{text: 'gray', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-gray.css');}},
							{text: 'green', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-green.css');}},
							{text: 'indigo', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-indigo.css');}},
							{text: 'midnight', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-midnight.css');}},
							{text: 'olive', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-olive.css');}},
							{text: 'peppermint', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-peppermint.css');}},
							{text: 'purple', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-purple.css');}},
							{text: 'red', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-red.css');}},
							{text: 'silverCherry', iconCls: 'docs', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-silverCherry.css');}},
							{text: 'slickness', iconCls: 'buscar', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-slickness.css');}},
							{text: 'slate', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-slate.css');}},
							{text: 'vista', handler: function(){ Ext.util.CSS.swapStyleSheet('theme', '../extjs/resources/css/xtheme-vista.css');}}
					]
				}]
			});
			
			var ayudaGroupProfesor = new Ext.ButtonGroup({
				columns: 1,
				title: 'Ayuda',
				items: [{
					text: '<font face="arial" size=2 color=black>Ayuda</font>',
					scale: 'large',
					rowspan: 3, 
					iconCls: 'ayuda',
					handler: function(){
								winAyudaProfesor.show();
							}
				}]
			});
			
			var ProfesorAreaConocimientoDataStoreTemp = new Ext.data.Store({
				id: 'ProfesorAreaConocimientoDataStoreTemp',
				proxy: new Ext.data.HttpProxy({
					url: 'PROFESOR/listarAreasCononocimiento', 
					method: 'POST'
				}),
				root: 'results',
				totalProperty: 'total',
				reader: new Ext.data.JsonReader({
						root:'results',
						totalProperty:'total'
					},
					[
						{name: 'profesorAreaConocimientoCodigoCombo', type: 'string'},
						{name: 'profesorAreaConocimientoNombreCombo', type: 'string'}
					]
				)
			});
			ProfesorAreaConocimientoDataStoreTemp.load();

			var ProfesorAreaConocimientoDataStore = new Ext.data.Store({
				id: 'ProfesorAreaConocimientoDataStore',
				proxy: new Ext.data.HttpProxy({
					url: 'PROFESOR/listarAreasCononocimientoProfesor', 
					method: 'POST'
				}),
				root: 'results',
				totalProperty: 'total',
				reader: new Ext.data.JsonReader({
						root:'results',
						totalProperty:'total'
					},
					[
						{name: 'profesorAreaConocimientoCodigoCombo', type: 'string'},
						{name: 'profesorAreaConocimientoNombreCombo', type: 'string'}
					]
				)
			});
			
			var ProfesorDataStore = new Ext.data.GroupingStore({
				id: 'ProfesorDataStore',
				proxy: new Ext.data.HttpProxy({
					url: 'PROFESOR/listar', 
					method: 'POST'
				}),
				root: 'results',
				baseParams:{Busqueda:'', Campo:''},
				totalProperty: 'total',
				reader:new Ext.data.JsonReader({
						root:'results',
						totalProperty:'total',
						id:'id'
					},
					[
						{name: 'profesorCodigo', type: 'string'},
						{name: 'profesorIdentificacion', type: 'string'},
						{name: 'profesorNombre', type: 'string'},
						{name: 'profesorDireccion', type: 'string'},
						{name: 'profesorTelefono', type: 'string'},
						{name: 'profesorEmail', type: 'string'},
						{name: 'profesorDependencia', type: 'string'},
						{name: 'profesorTitulo', type: 'string'},
						{name: 'profesorAreasConocimiento', type: 'string'},
						{name: 'profesorNombreAreasConocimiento', type: 'string'}
					]
				),
				sortInfo:{field: 'profesorCodigo', direction: 'ASC'}
			});
			ProfesorDataStore.load({params: {start: 0, limit: 20}});
			
			var formularioProfesor = new Ext.FormPanel({
				xtype: 'fieldset',
				//labelWidth: 110,
				title: 'Datos del profesor',
				defaultType: 'textfield',
				bodyStyle: Ext.isIE ? 'padding:5 5 5px 15px;' : 'padding:10px 15px;',
				style: {"margin-right": Ext.isIE6 ? (Ext.isStrict ? "-10px" : "-13px") : "0" },
				items: [
				  {fieldLabel: 'Codigo', emptyText: 'digite el codigo', id: 'IDCodigoProfesor', name: 'profesorCodigo', anchor: '100%', allowBlank:false},
				  {fieldLabel: 'Identificacion', emptyText: 'digite la identificacion', id: 'IDIdentificacionProfesor', name: 'profesorIdentificacion', anchor: '100%', allowBlank:false},
				  {fieldLabel: 'Nombre', emptyText: 'digite el nombre', id: 'IDNombreProfesor', name: 'profesorNombre', anchor: '100%', allowBlank:false},
				  {fieldLabel: 'Direccion', emptyText: 'digite la direccion', id: 'IDDireccionProfesor', anchor: '100%', name: 'profesorDireccion'},
				  {fieldLabel: 'Telefono', emptyText: 'digite el telefono', id: 'IDTelefonoProfesor', name: 'profesorTelefono', anchor: '100%'},
				  {fieldLabel: 'E-mail',  emptyText: 'digite el e-mail', id: 'IDEmailProfesor', name: 'profesorEmail', anchor: '100%'},
				  {fieldLabel: 'Dependencia',  emptyText: 'digite la dependencia', id: 'IDDependenciaProfesor', name: 'profesorDependencia', anchor: '100%'},
				  {fieldLabel: 'Titulo',  emptyText: 'digite la titulo', id: 'IDTituloProfesor', name: 'profesorTitulo', anchor: '100%'},
				  //{xtype: 'multiselect', height: 205, width: 240, ddReorder: true, name: 'profesorAreasConocimiento', triggerAction:'all', forceSelection:true, hiddenName :'profesorAreasConocimiento', fieldLabel: 'Areas de Conocimiento', mode: 'local', id: 'IDProfesorAreasConocimiento', valueField: 'profesorAreaConocimientoCodigoCombo', store: ProfesorAreaConocimientoDataStoreTemp, displayField: 'profesorAreaConocimientoNombreCombo'},
				  {
					xtype: 'itemselector', 
					name: 'profesorAreasConocimiento', 
					fieldLabel: 'Areas de Conocimiento', 
					id: 'IDProfesorAreasConocimiento',
					imagePath: '../extjs/examples/ux/images/',
					multiselects: [{
						width: 200,
						height: 200,
						store: ProfesorAreaConocimientoDataStoreTemp,
						displayField: 'profesorAreaConocimientoNombreCombo',
						valueField: 'profesorAreaConocimientoCodigoCombo'
					},{
						width: 200,
						height: 200,
						store: ProfesorAreaConocimientoDataStore,
						displayField: 'profesorAreaConocimientoNombreCombo',
						valueField: 'profesorAreaConocimientoCodigoCombo'
					}]
				  }
				],
				buttons:[
				  {text: 'Guardar', 
				   id:'BguardarProfesor', 
				   iconCls:'crear16', 
				   handler: function(){ 
										if(Ext.getCmp('BguardarProfesor').getText()=='Guardar') { crearProfesor();}
										if(Ext.getCmp('BguardarProfesor').getText()=='Actualizar') { actualizarProfesor();}
									  }
				  },
				  {text:'Cancelar', iconCls:'eliminar16', handler: function(){ Ext.example.msg('Aviso','Operacion cancelada'); winProfesor.hide();}}
				],
				width: 560,
				height: 500
			});
			
			var winProfesor = new Ext.Window({
				title: 'Crear Profesor',
				closable:false,
				width: 570,
				modal:true,
				height:530,
				items: [formularioProfesor]
			});
			
			winProfesor.show();
			winProfesor.hide();
			
			var winAyudaProfesor = new Ext.Window({
				title: 'Ayuda',
				closable: false,
				width: 380,
				modal: true,
				height: 280,
				items: [{ html: '<p>Aqui pongo lo de la ayuda</p>'}],
				buttons: [ {text:'Aceptar', iconCls:'agregar', handler: function(){ winAyudaProfesor.hide();}}]
			});

			var gridProfesors = new Ext.grid.GridPanel({
				store: ProfesorDataStore,
				columns: [
					{header: 'Codigo', width: 100, sortable: true, dataIndex: 'profesorCodigo'},
					{header: 'Identificacion', width: 100, sortable: true, dataIndex: 'profesorIdentificacion'},
					{header: 'Nombre', id:'IDprofesorNombre', width: 215, sortable: true, dataIndex: 'profesorNombre'},
					{header: 'Direccion', width: 100, sortable: true, dataIndex: 'profesorDireccion'},
					{header: 'Telefono', width: 80, sortable: true, dataIndex: 'profesorTelefono'},
					{header: 'E-mail', width: 125, sortable: true, dataIndex: 'profesorEmail'},
					{header: 'Dependencia', width: 100, sortable: true, dataIndex: 'profesorDependencia'},
					{header: 'Titulo', width: 180, sortable: true, dataIndex: 'profesorTitulo'},
					{header: 'Areas Conocimiento', width: 250, sortable: true, dataIndex: 'profesorNombreAreasConocimiento'}
				],
				sm: new Ext.grid.RowSelectionModel({
					singleSelect: true,
					listeners: {
						rowselect: function(sm, row, rec) {
							ProfesorAreaConocimientoDataStore.load({params: {Codigo: rec.get('profesorCodigo')}});
							formularioProfesor.getForm().loadRecord(rec);
						}
					}
				}),
				tbar: [gestionGroupProfesor, busquedaGroupProfesor, accesibilidadGroupProfesor, ayudaGroupProfesor],
				stripeRows: true,
				columnLines: true,
				autoExpandColumn: 'IDprofesorNombre',
				autoHeight: true,
				autoWidth: true,
				//height: 600,
				//width: 610,
				title: '<font face="arial" size=2>Datos del profesor</font>',
				stateful: true,
				stateId: 'grid',
				bbar: new Ext.PagingToolbar({
					pageSize: 20,
					store: ProfesorDataStore,
					displayInfo: true,
					displayMsg: 'Mostrando {0} - {1} de {2} profesores',
					emptyMsg: '<font face="arial" size=2>No hay profesores</font>',
					items:[{ scale: 'medium'}]
				}),
				view: new Ext.grid.GroupingView()
			});
			
			gridProfesors.render('formularioProfesor');
			
			function crearProfesor(){
				if(Ext.getCmp('IDCodigoProfesor').isValid() && Ext.getCmp('IDNombreProfesor').isValid())
				{
					Ext.Ajax.request({  
					waitMsg: 'Espere por favor',
					url: 'PROFESOR/guardar', 
					params: {
						Codigo: Ext.getCmp('IDCodigoProfesor').getValue(),
						Identificacion: Ext.getCmp('IDIdentificacionProfesor').getValue(),
						Nombre: Ext.getCmp('IDNombreProfesor').getValue(),
						Direccion: Ext.getCmp('IDDireccionProfesor').getValue(),
						Telefono: Ext.getCmp('IDTelefonoProfesor').getValue(),
						Email: Ext.getCmp('IDEmailProfesor').getValue(),
						Dependencia: Ext.getCmp('IDDependenciaProfesor').getValue(),
						Titulo: Ext.getCmp('IDTituloProfesor').getValue(),
						AreasConocimiento: Ext.getCmp('IDProfesorAreasConocimiento').getValue()
					},
					success: function(response, action){	  
						obj = Ext.util.JSON.decode(response.responseText);
						if (obj.success)
						{
							Ext.example.msg('Alerta', obj.mensaje);
							ProfesorDataStore.reload();
						}	
						else if (obj.success == false)
						{
							Ext.example.msg('Error', obj.errors.reason);
						}
					},
					failure: function(response){
						var result=response.responseText;
						Ext.example.msg('Error', 'no se pudo conectar a la base de datos intente mas tarde');  
					}
					});
					winProfesor.hide();
				}
				else{
					Ext.example.msg('Error', 'campos incompletos');
				}
				winProfesor.hide();
			}
			
			function actualizarProfesor(){
				if(Ext.getCmp('IDCodigoProfesor').isValid() && Ext.getCmp('IDNombreProfesor').isValid())
				{	
					Ext.Ajax.request({  
					waitMsg: 'Espere por favor',
					url: 'PROFESOR/actualizar', 
					params: {
						CodigoViejo: codigoProfesor,
						Codigo: Ext.getCmp('IDCodigoProfesor').getValue(),
						Identificacion: Ext.getCmp('IDIdentificacionProfesor').getValue(),
						Nombre: Ext.getCmp('IDNombreProfesor').getValue(),
						Direccion: Ext.getCmp('IDDireccionProfesor').getValue(),
						Telefono: Ext.getCmp('IDTelefonoProfesor').getValue(),
						Email: Ext.getCmp('IDEmailProfesor').getValue(),
						Dependencia: Ext.getCmp('IDDependenciaProfesor').getValue(),
						Titulo: Ext.getCmp('IDTituloProfesor').getValue(),
						AreasConocimiento: Ext.getCmp('IDProfesorAreasConocimiento').getValue()
					},
					success: function(response, action){	  
						obj = Ext.util.JSON.decode(response.responseText);
						if (obj.success)
						{
							Ext.example.msg('Alerta', obj.mensaje);
							ProfesorDataStore.reload();
						}	
						else if (obj.success == false)
						{
							Ext.example.msg('Error', obj.errors.reason);
						}
					},
					failure: function(response){
						var result=response.responseText;
						Ext.example.msg('Error', 'no se pudo conectar a la base de datos intente mas tarde');   
					}
					});
					winProfesor.hide();
				}
				else{
					Ext.example.msg('Error', 'campos incompletos');
				}
			}
			
			function eliminarProfesor(){
				
					Ext.MessageBox.confirm('Confirmacion','Realmente desea eliminar este profesor?',
					function(btn){
						if(btn == 'yes'){
							Ext.Ajax.request({  
							waitMsg: 'Espere por favor',
							url: 'PROFESOR/eliminar', 
							params: {
								Codigo: Ext.getCmp('IDCodigoProfesor').getValue()
							},
							success: function(response, action){	  
								obj = Ext.util.JSON.decode(response.responseText);
								if (obj.success)
								{
									Ext.example.msg('Alerta', obj.mensaje);
									ProfesorDataStore.reload();
									formularioProfesor.getForm().reset();
								}	
								else if (obj.success == false)
								{
									Ext.example.msg('Error', obj.errors.reason);
								}
							},
							failure: function(response){
								var result=response.responseText;
								Ext.example.msg('Error', 'no se pudo conectar a la base de datos intente mas tarde'); 
							}
							});
						}
					});
				
			}
		}
	}
}();